#ifndef CANCONFIG_h
#define CANCONFIG_h

#include "controlcan.h"
#include "geometry_msgs/msg/twist.hpp"
#include "std_msgs/msg/int32.hpp"
#include "signal.h"
#include <sstream>
#include <iomanip>
#include <pthread.h>


// 电机编号
int motor_id_01 = 0x0001; // 左前
int motor_id_02 = 0x0002; // 右前
int motor_id_03 = 0x0003; // 左后
int motor_id_04 = 0x0004; // 右后

// 电机原始速度(单位：HZ)
int V_x;

// USB-CAN系列接口卡的设备信息
VCI_BOARD_INFO board_info;
// 初始化CAN的配置
VCI_INIT_CONFIG init_config;
// CAN帧结构体
VCI_CAN_OBJ config_node;
VCI_CAN_OBJ send_motor_speed;
VCI_CAN_OBJ get_motor_receive;

// 设备类型修改
DWORD device_type;
// 设备的索引
DWORD device_index;
// CAN控制器的索引 CAN1为0，CAN2为1
DWORD can_index;
// 函数声明
void Init_Can(void);
void SendData(VCI_CAN_OBJ &handle_obj, const int id, const BYTE *data, int dataLen);

// 电机状态
BYTE speed_zero[5] = {0x1d, 0x00, 0x00, 0x00, 0x00}; // 速度归零
BYTE motor_stop[1] = {0x02};                         // 电机关闭
BYTE get_speed[1] = {0x06};
int32_t output[4];

// 接收缓冲区
VCI_CAN_OBJ rec[1];  // 只接收一个消息
VCI_CAN_OBJ rec2[1]; // 只接收一个消息
VCI_CAN_OBJ rec3[1]; // 只接收一个消息
VCI_CAN_OBJ rec4[1]; // 只接收一个消息

UINT Len = 5;        // 接收缓冲区长度
INT WaitTime = 1000; // 等待时间为1000毫秒

void *receive_func(void *param);
pthread_t threadid;
auto rt1_data = std_msgs::msg::Int32();
auto rt2_data = std_msgs::msg::Int32();
auto rt3_data = std_msgs::msg::Int32();
auto rt4_data = std_msgs::msg::Int32();

#endif